#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define y1 y_alpha_1

using namespace std;

using ll = long long;
using db = double;
using vec = vector<int>;
using pii = pair<int,int>;

int read() {
	int x = 0; bool f = 0; char ch = getchar();
	while(!isdigit(ch)) f |= ch == '-',ch = getchar();
	while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48),ch = getchar();
	return f ? -x : x;
}

const int N = 2e5 + 10;

ll a[N],b[N],p[N];
int n,h[N],m,q,cnt;
struct edge { int v,w,nxt; } e[N];
void link(int x,int y,int w) { e[++cnt] = (edge) { y,w,h[x] }; h[x] = cnt; }

namespace st {
	ll mn[N << 2],tg[N << 2];
	void pushup(int o) { mn[o] = min(mn[o << 1],mn[o << 1 | 1]); }
	void add(int o,ll x) { mn[o] += x; tg[o] += x; }
	void pushdn(int o) { if(tg[o]) add(o << 1,tg[o]),add(o << 1 | 1,tg[o]),tg[o] = 0; } 
	void build(int o = 1,int l = 1,int r = n) {
		tg[o] = 0; if(l == r) return mn[o] = b[l],void(); int mid = l + r >> 1;
		build(o << 1,l,mid); build(o << 1 | 1,mid + 1,r); pushup(o);
	}
	void upd(int xl,int xr,ll v,int o = 1,int l = 1,int r = n) {
		if(xl == l && xr == r) return add(o,v); int mid = l + r >> 1; pushdn(o);
		if(xr <= mid) upd(xl,xr,v,o << 1,l,mid);else if(xl > mid) upd(xl,xr,v,o << 1 | 1,mid + 1,r);
		else upd(xl,mid,v,o << 1,l,mid),upd(mid + 1,xr,v,o << 1 | 1,mid + 1,r); pushup(o);
	}
	ll qmn() { return mn[1]; } 
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("1.in","r",stdin);
#endif
	n = in;	m = in,q = in;
	for(int i = 1;i < n;i++) a[i] = in,b[i + 1] = in;
	for(int i = 1,u,v,w;i <= m;i++) u = in,v = in,w = in,link(u,v,w);
	st :: build();
	for(int x = 1;x <= n;x++) {
		for(int i = h[x];i;i = e[i].nxt) st :: upd(1,e[i].v,e[i].w);
		p[x] = st :: qmn();
	}
	for(int i = 1;i <= n;i++) b[i] = a[i] + p[i];
	st :: build(); printf("%lld\n",st :: qmn());
	for(int i = 1;i <= q;i++) {
		int x = in,f = in;
		st :: upd(x,x,f - a[x]); a[x] = f; printf("%lld\n",st :: qmn());
	}
	return 0;
}
